home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 020a / dcfg202.zip / DCFG2.DOC < prev    next >
Text File  |  1992-01-24  |  27KB  |  543 lines

  1.                  Dirt Cheap Frame Grabber V2.02
  2.                          by Michael Day
  3.                      as of 5 January 1992
  4.                           Public Domain
  5.  
  6. This device is free and released to the public domain. 
  7. If you actually find a use for it, all the more power to ya!
  8.  
  9. The purpose of the DCFG is to simply provide a very simple method 
  10. to grab video pictures and display them on a computer monitor. 
  11.  
  12. Version 1.01 of the DCFG only provided 4 levels of gray scale.
  13. Version 2.01 makes a modification which allows for 12 gray scales 
  14. by reading the port four times and interpolating the results.
  15. Version 2.02 fixes a schematic error (DO3 is pin 5, not pin 4).
  16.  
  17. The DCFG requires at least a 80286 or better and a VGA 
  18. display to run. While it is possible to change the program to 
  19. allow operation on a 8086 and/or a different display, I'm not 
  20. doing it. If you want to, you can. My intent was to just prove 
  21. that it was possible. 
  22.  
  23. The frame grabber program at this point is very simple, and as a 
  24. result has some problems. The heart of the program relies on a 
  25. very fast IO port to memory instruction. It can operate as fast 
  26. as the computer can shove data from the port to the memory. This 
  27. is as fast as DMAing the data could do.  This method is sensitive 
  28. to computer speed. As such, you may not get a stable picture at 
  29. first. If you don't, use the left or right arrow keys to adjust 
  30. the horizontal sample size. The up/down arrows adjust the 
  31. vertical sample size, but this normally doesn't need to be done. 
  32.  
  33. You will probably notice some sparkles (pixels shifting left and 
  34. right one pixel position). This is caused by sample jitter and is 
  35. normal. All sampling systems have this problem. Some less than 
  36. others. Even your TV has the problem, but it is normally good 
  37. enough that you don't see it. 
  38.  
  39. The jitter is caused by the fact that the sampler is not 
  40. perfectly synchronized to the incoming video signal. Your TV has 
  41. a lot of circuitry in it to achieve the synchronization. Being 
  42. that this is a dirt cheap frame grabber, there is only limited 
  43. synchronization of the picture, and no synchronization of the 
  44. sampler. If you want to try to improve on it, please do.
  45.  
  46. To use the Dirt Cheap Frame Grabber, plug it into a PC printer 
  47. port, and attach the other end to the video output from a VCR or 
  48. TV Monitor and run the program. Use the left or right arrow keys 
  49. to adjust the horizontal sample size to obtain a stable picture.
  50.  
  51. Do not attach the Dirt Cheap Frame Grabber to the computer with a 
  52. long printer cable. We are dealing with high speed signals here 
  53. (up to 4MHz). It requires as short a connection to the computer 
  54. as you can give it. I built my circuit inside the back shell of 
  55. the connector that plugs into the printer port on the computer.
  56.  
  57.                     Dirt Cheap Frame Grabber
  58.     (DB25P)                                     
  59.     DO0 ---330ohm-------------*--->|--*-->|---*    IC1 = LM339   
  60.     pin 2                  Vr |  red    1N914 |          quad    
  61.                        (2.4v) |  led          |        comparator
  62.     DO1 ---330ohm-------------*               |                   
  63.     pin 3                     |               |    * = connection    
  64.                              330ohm           |                       
  65.           1N914               |               |    ) = no connect
  66.     DO6 ---|<---*---1Kohm-----* Vc (2.21v)    |       (jump over)
  67.     pin 8                     |               | 
  68.           1N914               |               | Vr = ref voltage  
  69.     DO7 ---|<---*---510ohm----*------*        |      2.4 volts        
  70.     pin 9                     |      |        |                   
  71.                    (trimmer) 5Kohm<--*        | Vc = 00 = 1.65v   
  72.                               |               |      01 = 1.80v   
  73.     DO2 ----------*-----------)------| |------*      10 = 1.95v   
  74.     pin 4         |           |     .1uf      |      11 = 2.21v   
  75.                  3|           |               |                       
  76.     DC3           |/ |6       |               | Vz = 00 = 0.74v   
  77.     (slct)     1 /  -|--------* Vz (1.0v)     |      01 = 0.81v   
  78.     DS6 --------|IC1a|        |               |      10 = 0.88v   
  79.     (ack)        \  +|----*   |               |      11 = 1.00v   
  80.     pins 10,17     \ |7   |  360ohm           |                     
  81.                           |   |               | Vy = 00 = 0.45v   
  82.     DC2            / |4   |   |               |      01 = 0.54v     
  83.     (init)     2 /  -|----)---* Vy (0.66v)    |      10 = 0.59v   
  84.     DS5 --------|IC1b|    |   |               |      11 = 0.66v    
  85.     (pe)         \  +|----*   |               |                   
  86.     pins 12,16     \ |5   |  220ohm           | Vx = 00 = 0.34v   
  87.                           |   |               |      01 = 0.37v        
  88.     DC1            / |10  |   |               |      10 = 0.40v   
  89.     (afd)     13 /  -|----)---* Vx (0.45v)    |      11 = 0.45v   
  90.     DS4 --------|IC1c|    |   |               |                   
  91.     (slct)       \  +|----*   |               | Vs = 00 = 0.086v  
  92.     pins 13,14     \ |11  |  360ohm           |      01 = 0.093v  
  93.                           |   |               |      10 = 0.101v  
  94.     DC0            / |8   |   |               |      11 = 0.115v  
  95.     (stb)     14 /  -|----)---* Vs (0.12v)    |  Assumes Vz set
  96.     DS7 --------|IC1d|    |   |               |  for 1.0v using 
  97.     (busy)       \  +|----*   |               |  5Kohm trimmer 
  98.     pins 11,1   12|\ |9   |  120ohm           |  with DO6, DO7 
  99.                   |       |   |               |  set high.      
  100.     Gnd ----------*-------)---*---------------*------*--------*
  101.     pins                  |   |               |      |        |
  102.     18,19,20,21,          |  100Kohm          |     75ohm     |
  103.     22,23,24,25           |   |      .1uf     |      |        |
  104.                           *---*-------| |-----)------*------o )          
  105.                    2N2222 |                   |             RCA   
  106.             *---------C   E                   |            phono
  107.             |           B                     |            jack 
  108.     pin 5   |           |      1N914          | 
  109.     DO3 ----*--4.7Kohm--*-------->|-----------*
  110. è-----------------------------------------------------------------
  111.  
  112.  
  113.                          Parts List
  114.  
  115.     1ea  DB25P connector
  116.     1ea  RCA phono jack
  117.     1ea  5K ohm trimmer pot
  118.     1ea  510 ohm resistor
  119.     1ea  1K ohm resistor
  120.     2ea  330 ohm resistor
  121.     2ea  220 ohm resistor
  122.     2ea  360 ohm resistor
  123.     1ea  120 ohm resistor
  124.     1ea  100K ohm resistor
  125.     1ea  75 ohm resistor
  126.     1ea  4.7K ohm resistor
  127.     2ea  0.1uF capacitor 
  128.     1ea  red LED
  129.     4ea  1N914 diode (or 1N4148)
  130.     1ea  2N2222 transistor (NPN)
  131.     1ea  LM339 quad comparator
  132.  
  133.  
  134. -----------------------------------------------------------------
  135.  
  136.  
  137.                     Dirt Cheap Frame Grabber
  138.                        Circuit Description                        
  139.  
  140. It is assumed that the video signal will be a NTSC type signal 
  141. complying to the RS170A video standard with negative going sync 
  142. and a signal level between 0.5Vpp to 2Vpp (1Vpp desired). This is 
  143. the typical signal that is available on the video output jack of 
  144. a VCR or TV monitor. 
  145.  
  146. If you are using a VCR type video signal, you can get a quick 
  147. start by adjusting the bias trimmer (5Kohm pot) to obtain 
  148. 1.0volt at location Vz while insuring that the data output lines 
  149. on the printer port are set to 0FFH. Once you get going you can 
  150. fine tune the reference voltage by adjusting the trimmer to 
  151. obtain the best picture.
  152.  
  153. The video input comes in on the RCA phono jack. The 75ohm 
  154. resistor provides the proper load for the connection. The .1mf 
  155. capacitor isolates the signal from the rest of the circuit and is 
  156. used as a part of the level shifter to clamp the video input to 
  157. ground reference on the computer. The 1N914 diode and 4.7K ohm 
  158. resistor provides a voltage reference 0.7V above ground for the 
  159. 2N2222 clamp transistor. The transistor and diode get their 
  160. supply voltage from the DO3 output pin. Typically this is around 
  161. 3.3volts and should have enough power for our needs assuming that 
  162. the output driver is a 74LS374 driver which is the standard part 
  163. for a PC printer port.
  164. èThe transistor provides a low impedance charge path for the 
  165. capacitor to clamp the sync tip to ground so as to insure the 
  166. video signal sync tip is referenced to ground. The 100K ohm 
  167. resistor provides a high resistance discharge path for the 
  168. capacitor. Enough to provide a discharge path for the capacitor, 
  169. but not enough to seriously affect the video signal level.
  170.  
  171. The clamped video signal is then applied to all four comparators 
  172. in the LM339. The LM339 gets its power from the DO2 output pin
  173. Like the clamp transistor, normally there should be enough power 
  174. from the data output pin to supply the IC. A .1mf capacitor is 
  175. used to stabilize the power source. You can probably getaway 
  176. without using the capacitor, but I'm paranoid. 
  177.  
  178. The four comparators receive their reference voltage from a 
  179. resistor ladder consisting of 360ohm, 220ohm, and 360ohm 
  180. resistors in series with the 120ohm resistor tied to the common 
  181. ground. The voltage level on the 120ohm resistor provides the 
  182. sync detector reference.  The other three resistor positions 
  183. provide three increasing levels of amplitude detection. 
  184.  
  185. The resistor ladder voltages can be shifted up or down by the 
  186. computer using the DO6 and DO7 data output lines on the printer 
  187. port. This allows 12 gray scale levels to be detected instead of 
  188. the basic 4 levels that would otherwise be available.
  189.  
  190. The resistor ladder requires a regulated source voltage with an 
  191. adjustment to allow compensation for various input signal levels 
  192. depending on the signal source. The 5Kohm trimmer pot provides 
  193. for the bias adjustment which allows the circuit to be adapted to 
  194. the absolute signal source level. The regulated source voltage is 
  195. derived from the red LED in series with a 1N914 diode. A red LED 
  196. will have a typical voltage drop of about 1.7 volts and the diode 
  197. has a typical voltage drop of 0.7 volts giving a total of 2.4 
  198. volts for the reference. 
  199.  
  200. The absolute level is not important since the trimmer can 
  201. compensate for minor differences. The LED gets its power through 
  202. the two 330ohm resistors attached to the D0 and D1 outputs. Two 
  203. outputs are used here to insure that there is enough power to 
  204. drive the LED and the resistor ladder while maintaining a 
  205. regulated voltage source across the LED. 
  206.  
  207. The LED has a 1N914 diode in series with it to get the reference 
  208. voltage in the range that we need it. This is the one area where 
  209. I go beyond spec for the system. The 74LS374 driver is specified 
  210. to have an output voltage of greater than 2.5volts at 2.5ma. I'm 
  211. actually relying on the true output voltage for the part which is 
  212. typically 3.3volts. Should your printer port use a different part 
  213. than the 74LS374, the circuit may or may not work properly. A 
  214. 74HTC374 cmos type part will pull up to 5volts. This is not a 
  215. problem, since all we need is 3 volts or better source voltage to 
  216. supply the circuit. If the output device supplies less voltage, 
  217. the circuit will not work because the LED and diode will not be 
  218. able to maintain the required 2.4volt reference source.è
  219. The voltage reference is supplied through a 220ohm resistor to 
  220. the bias adjustment trimmer pot. The 220ohm resistor is a load 
  221. source for the 1Kohm and 510ohm gray level shift control 
  222. resistors attached to the DO6 and DO7 data output pins. The gray 
  223. level shift control lines change the reference voltage on the 
  224. resistor ladder to allow the computer to adjust the reference 
  225. voltage to four different levels. This allows us to multiply the 
  226. gray level detection by four by reading in four sequential video 
  227. frames at the four possible reference control levels and 
  228. selecting the highest determined video level from the four frames 
  229. that are collected. This gives us a total of 12 gray levels 
  230. instead of the four levels that would otherwise be available.
  231. The down side to this is that we have to collect four separate 
  232. video frames to do this which means that motion will be blurred.
  233.  
  234. The comparators receive their pull-ups from the control lines DC0, 
  235. DC1, DC2, and DC3. In a standard printer port these lines are 
  236. open collector outputs with 4.7Kohm pull up resistors. It is 
  237. presumed that this is the case for this circuit. It saves us the 
  238. four pull up resistors. If you feel nervous about this, you can 
  239. attach 4.7Kohm pull up resistors to the comparator outputs and 
  240. attach two each to the remaining DO4 and DO5 output pins (pins 6 
  241. and 7). Note that you should not draw more than 2.5ma from any 
  242. data output pin or the output voltage may sag.
  243.  
  244. When wiring the circuit, remember that you are working with video 
  245. signals. That means you are working with signals in the RF range 
  246. (up to 4MHz). Keep all wiring as short as possible and the 
  247. components close together. All grounds should be tied to one 
  248. single point at the 25pin connector. The circuit must be built as 
  249. close as possible to the DB25P connector as possible. Do not 
  250. attach this device to the computer with a long cable. The DB25P 
  251. connector must plug directly into the computer to prevent signal 
  252. loss. Any attaching cable should be no more than six inches 
  253. long. If possible, I suggest building the circuit into the back 
  254. shell of the connector so that there is no cable involved.
  255.  
  256. Remember that we are dealing with high speed signals here. 
  257. Long cables don't work. Failure to keep the connection short will 
  258. cause the sync signal not to be detected and the picture to blur 
  259. or smear. The video cable attached to the RCA jack can be any 
  260. length (within reason) since it is not as sensitive to cable 
  261. length problems. Video cable lengths longer than 20 feet 
  262. may cause problems, I haven't tried them that long.
  263.  
  264. If you are good at this stuff, it is possible to wire the whole 
  265. circuit inside the connector shell (don't use a shielded shell, 
  266. it will short out the circuitry). It's a very tight fit, but if 
  267. you pick a large shell, and are very careful, it can be all 
  268. stuffed in there. The trimmer pot should be made available for 
  269. easy adjustment (I drilled a hole in the shell for access). 
  270. Also, the led should be visible (another hole to drill) to be 
  271. able to quickly determine if the circuit is working.
  272. èTo make it all work, simply plug the connector into a printer 
  273. port on the PC, and run the frame grabber program. When running 
  274. the program, the LED should turn on. That indicates that the 
  275. circuit has enough power to operate. If the LED does not come on, 
  276. or it is very dim, there may not be enough power, and you can't 
  277. use that printer port with the circuit. Try another port or a 
  278. different computer. Note that you may see some minor flickering 
  279. on the led when changing the DO6 and DO7 data output lines. This 
  280. is normal and indicates that the circuit is working properly. 
  281.  
  282. Changing the DO6 and DO7 data output lines causes the current 
  283. flow through the voltage reference ladder to change. This means 
  284. that more or less current will be available to the LED, causing 
  285. it to change in brightness. The LED should not go out completely 
  286. nor become very dim. That would indicate that there is not enough 
  287. power available to drive the voltage reference or a problem in 
  288. your program.
  289.  
  290. You can operate in the simple mode by outputting a 0FFH to the 
  291. data output port which sets all the output lines high. This 
  292. provides power to the comparators, voltage reference, and clamp 
  293. transistor. It also disables the gray scale control lines. 
  294.  
  295. To shift the gray scale reference voltage level, send either a 
  296. 03FH (gray ref 0), 07FH (gray ref 1), 0BFH (gray ref 2), or 0FFH 
  297. (gray ref 3) to the data output port. 
  298.  
  299. The resulting detected output from the port is as follows:
  300.  
  301.     76543210
  302.     1000xxxx  sync
  303.     0000xxxx  level 0 (black)
  304.     0001xxxx  level 1 (dark gray)
  305.     0011xxxx  level 2 (gray)
  306.     0111xxxx  level 3 (white)
  307.     
  308. Note that bits 0-3 are unknown and should not be relied on as 
  309. being valid.
  310.  
  311. -----------------------------------------------------------------
  312.  
  313.  
  314.                        Program Description
  315.  
  316. Thi≤ prograφ require≤ ß 28╢ o≥ bette≥ computer« ┴ printe≥ por⌠ ì
  317. witΦ thσ attacheΣ devicσ describeΣ abovσ witΦ ß vide∩ signa∞ ì
  318. drivinτ it« AnΣ ß MCG┴ o≥ VG┴ typσ displa∙ system« Yo⌡ star⌠ thσ ì
  319. prograφ u≡ b∙ enterinτ it≤ namσ a⌠ thσ DO╙ promp⌠ followeΣ b∙ thσ ì
  320. printe≥ por⌠ numbe≥ yo⌡ wisΦ t∩ use« 
  321.  
  322. Examples║ DCFG▓ 1    <-¡ load≤ prograφ fo≥ usσ witΦ LPT1.
  323.           DCFG▓ 2    <-¡ load≤ prograφ fo≥ usσ witΦ LPT2.
  324.  
  325. Iµ yo⌡ don'⌠ givσ i⌠ ß number¼ thσ prograφ wil∞ defaul⌠ t∩ LPT1« 
  326. è
  327. Grabbing a Frame:
  328.  
  329. The program works by grabbing samples from the printer port in 
  330. frames. Once each time through the loop, it sucks in a video 
  331. frame from the video input.  
  332.  
  333. Actually, more than a frame is grabbed. How much is grabbed 
  334. depends on the speed of access to the printer port on your 
  335. computer. On a typical computer this is 1.5us per byte. At the 
  336. 1.5us access rate, 63.5us per scan line, and 265.5 scan lines per 
  337. video frame, that results in 11240 bytes per frame required to be 
  338. collected. The collection size is currently set to 20,000 bytes. 
  339. That provides enough space to handle buss speeds up to 12MHz which 
  340. should be adequate for most computers. 
  341.  
  342. The down side is that we collect 210 extra scan lines on a normal 
  343. computer. In most situations this isn't a problem since three to 
  344. four frames will typically be lost while the collected video data 
  345. is being processed anyway. The extra partial frame has only a
  346. slight effect on the over all collection time and results. The 
  347. effect is minimized on a fast machine since nearly the entire 
  348. array is filled anyway.
  349.  
  350. The maximum sample size allowed is 65520. More than that and we 
  351. run out of segment space in memory. Also during this period I 
  352. keep the system interrupts off so as to not have distortions of 
  353. the collected data caused by the system deciding to go off and do 
  354. something else.
  355.  
  356. In addition to the collection time, there is a pre-configure time 
  357. while the loop is waiting for the vertical sync pulse to come in. 
  358. I don't collect any data prior to the vertical sync pulse since 
  359. it would be ignored anyway. 
  360.  
  361. The vertical sync is determined by watching the sync line. When 
  362. it goes on for longer than 10us, you are in the vertical sync 
  363. time. Less then 10us, and it is a horizontal sync pulse. 
  364.  
  365. Once the video data is collected, I release the interrupts to 
  366. allow the computer to return to normal operation. Should no sync
  367. come in during the vertical sync detection period, I terminate 
  368. the loop after a while to allow the computer to continue to 
  369. operate, and return an error condition so that the program will 
  370. know that no data was collected. 
  371.  
  372. If you have an O'scope, you can verify the video collection time 
  373. by observing data output line DO7 (pin 9). This line should never 
  374. go high for longer than 50ms. Typically it should be around 20 to 
  375. 40ms in length. This should be the same whether you have a signal 
  376. going into the video line or not. Though there may be a 
  377. difference between the timing when a signal is present verses 
  378. when it is not present.
  379.  
  380. èVideo Data Translation:
  381.  
  382. Once I get the data, I convert it to in intermediate form to be 
  383. stored in the interpretation array. This array keeps the gray 
  384. level values collected on the previous frames. The display 
  385. routine will later interpret the values stored in the 
  386. interpretation array into an absolute gray scale level for each 
  387. display pixel.
  388.  
  389. The video data is converted by searching for the horizontal sync 
  390. pulse. Once found, we search for the end of the sync pulse. 
  391. Following the end of the sync pulse is the actual video data. 
  392.  
  393. Each collected byte in the scan line is read and converted to the 
  394. intermediate gray scale level.  There are only four levels 
  395. involved; 00, 01, 10, and 11. Note that since sync is not video 
  396. data, it is not included in the gray scale level. Even if it were 
  397. included, it would be a 00 value. Once converted, the byte is 
  398. then shifted into it's proper frame position in the interp array 
  399. byte and stored in the array. 
  400.  
  401. This is repeated until either the full width of the 
  402. interpretation array is filled, or a new sync pulse is 
  403. encountered. Should a sync pulse be encountered, the rest of the 
  404. interpretation array values are filled with 00. Should the full 
  405. width of the interpretation array be encountered, then the rest 
  406. of the scan line is discarded until an new sync pulse is 
  407. encountered. This sequence is continued until the entire frame 
  408. has been converted.
  409.  
  410.  
  411. Displaying the Data:
  412.  
  413. Once the frame has been converted, the interpretation array is 
  414. then displayed. Each byte is read from the interpretation array 
  415. and translated to an absolute gray level using the translation 
  416. array located in the first 256 bytes of the interpretation array. 
  417. There are 12 levels of gray available, plus black. The 
  418. translation array was copied into the interpretation array at the 
  419. time the interpretation array was created.
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434. èThe translation array is formed from the following gray level 
  435. conversion chart:
  436.  
  437.      gray level interpretation chart                       
  438.           frame data                                       
  439. gray    F3  F2  F1  F0   F3 = frame 3, F2 = frame 2        
  440. level:  76  54  32  10   F1 = frame 1, F0 = frame 0        
  441.    12:  11  xx  xx  xx   each group of two bits            
  442.    11: <11  11  xx  xx   represent the video level         
  443.    10: <11 <11  11  xx   for the frame indicated           
  444.     9: <11 <11 <11  11                                     
  445.     8:  10 <11 <11 <11   xx = any bit pattern              
  446.     7: <10  10 <11 <11   <11 = less than 11; (10, 01, 00)  
  447.     6: <10 <10  10 <11   <10 = less than 10; (01 or 00)    
  448.     5: <10 <10 <10  10   11, 10, 01, or 00 = the indicated 
  449.     4:  01 <10 <10 <10                absolute bit pattern 
  450.     3:  00  01 <10 <10                                     
  451.     2:  00  00  01 <10   the gray level for the specified  
  452.     1:  00  00  00  01   bit pattern is shown at the left  
  453.     0:  00  00  00  00                                     
  454.  
  455. There are no sync bytes in the interpretation array since they 
  456. were stripped out during the process of converting the video data 
  457. to the interpretation data. Note that it takes four video frames 
  458. to completely update the interpretation array. However, the 
  459. actual displayed data will reflect the highest gray level 
  460. determined from the four previous reads. This means that if the 
  461. video level shifts towards the white level, the change on the 
  462. display will be immediate. If the video level moves towards the 
  463. black level, the change on the display will take up to four frame 
  464. grabs to reflect the lower video level for that pixel.  
  465.  
  466. One big problem is that since the number of scan lines collected 
  467. is much greater than the resolution of pixels collected in each 
  468. scan line, the aspect ratio of the picture would be out of whack 
  469. if we were to display the data pixel for pixel as we received it.
  470. In order to get the aspect ratio back to a reasonable value, we 
  471. must throw data away. We do this by discarding three scan lines 
  472. for every one that we show. If you have a very fast buss, you may 
  473. want to change this to discard two scan lines instead of three 
  474. in order to get a more reasonable aspect ratio.
  475.  
  476. The other thing I do is to pull a little trick to improve the 
  477. horizontal resolution. Normally there is a typical horizontal 
  478. resolution of about 40 pixels. This is not very much, and it 
  479. would be useful if there were a better resolution. There is a 
  480. halfway solution. 
  481.  
  482. What I do is display the even pixels on a scan line from the scan 
  483. line that I'm currently processing. I then display the odd pixels 
  484. from the next scan line on the succeeding video frame. What this 
  485. does is to provide a random selection on the odd pixels between 
  486. the normal two sequential scanned pixels that effectively 
  487. improves the display resolution by about 50%. 
  488. èThe downside is that it worsens the jitter/twinkle problem since 
  489. the odd pixel is developed from a pseudo-random sampling 
  490. mechanism which is not consistent. 
  491.  
  492. One thing to keep in mind is that the frame grab routine normally 
  493. takes between one and three video frames to collect data, and 
  494. during this time the interrupts are disabled. What that means is 
  495. that if you are operating on a computer which has a clock 
  496. interrupt faster than the normal 55ms, you will lose time, and 
  497. may experience problems. 
  498.  
  499. Also note that since the interrupts are disabled, anything that 
  500. uses high speed interrupts during the time the video data is 
  501. being collected (such as RS232), will not work. The interrupts 
  502. will be lost.
  503.  
  504. The main factor that affects speed on slower machines are the 
  505. conversion and display routines. The INS instruction used to 
  506. collect the video data is relatively cpu performance independent. 
  507. The main thing that affects its operation is the buss performance 
  508. of the computer. The faster the buss, the more video pixels that 
  509. can be collected per scan line.
  510.  
  511. One possible consideration on slower machines would be to discard 
  512. the extra scan lines in the Video to interpretation array 
  513. conversion rather than in the interpretation to display routine. 
  514. That way the extra scan lines would not even be processed, thus 
  515. increasing the speed of the overall process loop. 
  516.  
  517. ---
  518.  
  519. Future considerations for someone to do if they wish to improve 
  520. on the design would be to improve the synchronization to reduce 
  521. the jitter problem. At this point I don't have any ideas on how 
  522. to improve the problem. 
  523.  
  524. Another improvement that is possible to do would be to analyze the 
  525. captured video frame to determine the proper values to use for 
  526. capturing the data such as scan line length in pixels, vertical 
  527. sync length, total scan lines, etc. 
  528.  
  529. A mechanism to increase the size of the displayed picture, and 
  530. maintain the best resolution possible while doing so. 
  531.  
  532. Save an image to disk or a series of images to make a movie.  
  533.  
  534. Be able to print a captured image.
  535.  
  536. Integrate the image with sound.
  537.  
  538. And of course integrating this stuff into Windows would be nice. 
  539.  
  540.  
  541. That's all folks!
  542. <eof>è
  543.